﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BE_CruzDelSur;
using System.Data.SqlClient;
using System.Data;
using BR_CruzDelSur.Interfaces;

namespace BR_CruzDelSur
{
    public class BR_Recojo : IBR_Recojo
    {
        Conexion conn = new Conexion();
        IBR_Cliente ECliente = new BR_Cliente();
        IBR_Util EEstado = new BR_Util();
        IBR_Carga ECarga = new BR_Carga();

        public bool f_ActualizarRecojo(int codigoRecojo, int codigoUbigeo, string descripcion, string direccion, string referencia, string telefono, string dniCliente, DateTime fechaRecojo)
        {
            SqlParameter[] param = new SqlParameter[8];
            param[0] = new SqlParameter("INT_CODIGO_RECOJO", SqlDbType.Int);
            param[0].Value = codigoRecojo;
            param[0].Direction = ParameterDirection.Input;
            param[1] = new SqlParameter("INT_CODIGO_UBIGEO", SqlDbType.Int);
            param[1].Value = codigoUbigeo;
            param[1].Direction = ParameterDirection.Input;
            param[2] = new SqlParameter("VCH_DESCRIPCION", SqlDbType.VarChar);
            param[2].Value = descripcion;
            param[2].Direction = ParameterDirection.Input;
            param[3] = new SqlParameter("VCH_DIRECCION", SqlDbType.VarChar);
            param[3].Value = direccion;
            param[3].Direction = ParameterDirection.Input;
            param[4] = new SqlParameter("VCH_REFERENCIA", SqlDbType.VarChar);
            param[4].Value = referencia;
            param[4].Direction = ParameterDirection.Input;
            param[5] = new SqlParameter("VCH_DNI", SqlDbType.VarChar);
            param[5].Value = dniCliente;
            param[5].Direction = ParameterDirection.Input;
            param[6] = new SqlParameter("VCH_TELEFONO", SqlDbType.VarChar);
            param[6].Value = telefono;
            param[6].Direction = ParameterDirection.Input;
            param[7] = new SqlParameter("DTM_FECHA_RECOJO", SqlDbType.DateTime);
            param[7].Value = fechaRecojo;
            param[7].Direction = ParameterDirection.Input;

            try
            {
                SqlHelper.ExecuteNonQuery(conn.CadenaConexion, System.Data.CommandType.StoredProcedure, "SP_ACTUALIZARRECOJO", param);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public int f_InsertarRecojo(int codigoUbigeo, string descripcion, string direccion, string referencia, string telefono, string dniCliente, DateTime fechaRecojo)
        {
            SqlParameter[] param = new SqlParameter[8];
            param[0] = new SqlParameter("INT_CODIGO_RECOJO", SqlDbType.Int);
            param[0].Direction = ParameterDirection.Output;
            param[1] = new SqlParameter("INT_CODIGO_UBIGEO", SqlDbType.Int);
            param[1].Value = codigoUbigeo;
            param[1].Direction = ParameterDirection.Input;
            param[2] = new SqlParameter("VCH_DESCRIPCION", SqlDbType.VarChar);
            param[2].Value = descripcion;
            param[2].Direction = ParameterDirection.Input;
            param[3] = new SqlParameter("VCH_DIRECCION", SqlDbType.VarChar);
            param[3].Value = direccion;
            param[3].Direction = ParameterDirection.Input;
            param[4] = new SqlParameter("VCH_REFERENCIA", SqlDbType.VarChar);
            param[4].Value = referencia;
            param[4].Direction = ParameterDirection.Input;
            param[5] = new SqlParameter("VCH_DNI", SqlDbType.VarChar);
            param[5].Value = dniCliente;
            param[5].Direction = ParameterDirection.Input;
            param[6] = new SqlParameter("VCH_TELEFONO", SqlDbType.VarChar);
            param[6].Value = telefono;
            param[6].Direction = ParameterDirection.Input;
            param[7] = new SqlParameter("DTM_FECHA_RECOJO", SqlDbType.DateTime);
            param[7].Value = fechaRecojo;
            param[7].Direction = ParameterDirection.Input;

            try
            {
                SqlHelper.ExecuteNonQuery(conn.CadenaConexion, System.Data.CommandType.StoredProcedure, "SP_INSERTARRECOJO", param);
                return Convert.ToInt16(param[0].Value);
            }
            catch (Exception ex)
            {
                return -1;
            }
        }
        
        public bool f_AsignarCarga(string codigoRecojo, string codigoCarga)
        {
            SqlParameter[] param = new SqlParameter[2];
            param[0] = new SqlParameter("INT_CODIGO_RECOJO", SqlDbType.Int);
            param[0].Value = codigoRecojo;
            param[0].Direction = ParameterDirection.Input;
            param[1] = new SqlParameter("INT_CODIGO_CARGA", SqlDbType.Int);
            param[1].Value = codigoCarga;
            param[1].Direction = ParameterDirection.Input;

            try
            {
                SqlHelper.ExecuteNonQuery(conn.CadenaConexion, System.Data.CommandType.StoredProcedure, "SP_ASIGNARCARGARRECOJO", param);
                return true;                
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public bool f_eliminarRecojo(int codigoRecojo) 
        {
            SqlParameter[] param = new SqlParameter[1];
            param[0] = new SqlParameter("INT_CODIGO_RECOJO", SqlDbType.Int);
            param[0].Value = codigoRecojo;
            param[0].Direction = ParameterDirection.Input;

            try
            {
                int result = SqlHelper.ExecuteNonQuery(conn.CadenaConexion, System.Data.CommandType.StoredProcedure, "SP_ELIMINARRECOJO", param);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }        
        }

        public BE_Recojo f_obtenerRecojo(string codigoRecojo)
        { 
            SqlParameter[] param = new SqlParameter[1];
            param[0] = new SqlParameter("INT_CODIGO_RECOJO", SqlDbType.Int);
            param[0].Value = codigoRecojo;
            param[0].Direction = ParameterDirection.Input;

            DataSet ds = SqlHelper.ExecuteDataSet(conn.CadenaConexion, System.Data.CommandType.StoredProcedure, "SP_OBTENERRECOJO", param);
            BE_Recojo Entidad = null;

            foreach (DataRow item in ds.Tables[0].Rows)
            {
                Entidad = new BE_Recojo()
                {
                    CodigoCarga = EEstado.f_intValor(item["INT_CODIGO_CARGA"].ToString()),
                    CodigoRecojo = EEstado.f_intValor(item["INT_CODIGO_RECOJO"].ToString()),
                    CodigoUbigeo = EEstado.f_intValor(item["INT_CODIGO_UBIGEO"].ToString()),
                    FechaRecojo = EEstado.f_datetimeValor(item["DTM_FECHA_RECOJO"].ToString()),
                    Direccion = item["VCH_DIRECCION"].ToString(),
                    Referencia = item["VCH_REFERENCIA"].ToString(),
                    Telefono = item["VCH_TELEFONO"].ToString(),
                    DNICliente = item["VCH_DOCUMENTO"].ToString(),
                    Estado = item["CHR_ESTADO"].ToString(),
                    DescripcionCarga = item["VCH_DESCRIPCION_CARGA"].ToString()
                };
                break;
            }
            return Entidad;
        }

        public List<BE_Recojo> f_ListarRecojo(int codigoRecojo, string dniCliente, string fechaRecojo)
        {
            List<BE_Recojo> lst = new List<BE_Recojo>();
            SqlParameter[] param = new SqlParameter[3];
            param[0] = new SqlParameter("INT_CODIGO_RECOJO", SqlDbType.Int);
            param[0].Value = codigoRecojo;
            param[0].Direction = ParameterDirection.Input;
            param[1] = new SqlParameter("VCH_DOCUMENTO", SqlDbType.VarChar);
            param[1].Value = dniCliente;
            param[1].Direction = ParameterDirection.Input;
            param[2] = new SqlParameter("DTM_FECHA_RECOJO", SqlDbType.VarChar);
            param[2].Value = fechaRecojo;
            param[2].Direction = ParameterDirection.Input;

            DataSet ds = SqlHelper.ExecuteDataSet(conn.CadenaConexion, System.Data.CommandType.StoredProcedure, "SP_LISTARRECOJOS", param);
            
            BE_Recojo Entidad;
            foreach (DataRow item in ds.Tables[0].Rows)
            {
                Entidad = new BE_Recojo()
                {
                    CodigoCarga = EEstado.f_intValor(item["INT_CODIGO_CARGA"].ToString()),
                    CodigoRecojo = EEstado.f_intValor(item["INT_CODIGO_RECOJO"].ToString()),
                    CodigoUbigeo = EEstado.f_intValor(item["INT_CODIGO_UBIGEO"].ToString()),
                    FechaRecojo = EEstado.f_datetimeValor(item["DTM_FECHA_RECOJO"].ToString()),
                    Direccion = item["VCH_DIRECCION"].ToString(),
                    Referencia = item["VCH_REFERENCIA"].ToString(),
                    Telefono = item["VCH_TELEFONO"].ToString(),
                    DNICliente = item["VCH_DOCUMENTO"].ToString(),
                    Estado = item["CHR_ESTADO"].ToString(),
                    DescripcionCarga = item["VCH_DESCRIPCION_CARGA"].ToString(),
                    NombresCliente = item["NOMBRECLIENTE"].ToString(),
                    DescripcionUbigeo = item["UBIGEO"].ToString()
                };
                lst.Add(Entidad);
            }

            return lst;
        }
    }
}
